#include"RBTree.h"
#include"AVLTree.h"
#include"MyMap.h"

//void test_AVLTree()
//{
//	AVLTree<int> tree;
//	int arr[] = { 2, 95, 56, 754, 125, 6235, 5463, 634, 6, 1, 34 };
//
//	for (int i : arr)
//	{
//		tree.Insert(i);
//		tree.InOrder();
//		cout << endl;
//		cout << tree.IsBalance();
//		cout << endl;
//	}
//}

//void test_RBTree1()
//{
//	//RBTree<int> tree;
//	//int arr[] = { 2, 95, 56, 754, 125, 6235, 5463, 634, 6, 1, 34 };
//
//	//for (int i : arr)
//	//{
//	//	tree.Insert(i);
//	//	tree.InOrder();
//	//	cout << endl;
//	//	cout << tree.IsBalance();
//	//	cout << endl;
//	//}
//	//tree.PrevOrder();
//
//	RBTree<int> t;
//	vector<int> v;
//	srand(time(0));
//	int N = 20;
//	for (int i = 0; i < N; ++i)
//	{
//		v.push_back(rand() % (3 * N));
//		//v.push_back(i);
//	}
//
//	for (auto& i : v)
//	{
//		t.Insert(i);
//
//		t.InOrder();
//		cout << endl;
//		cout << t.IsBalance();
//		cout << endl;
//	}
//	//t.PrevOrder();
//}

void test_MyMap()
{
	MyMap<int, int> tree;
	tree.Insert(make_pair(2, 2));

	vector<int> v;
	srand(time(0));
	int N = 20;
	for (int i = 0; i < N; ++i)
	{
		v.push_back(rand() % (3 * N));
		//v.push_back(i);
	}

	for (auto& i : v)
	{
		tree.Insert(make_pair(i, i));

		//tree.InOrder();
		//cout << endl;
		//cout << tree.IsBalance();
		//cout << endl;
	}

	MyMap<int, int>::Iterator it = tree.begin();
	MyMap<int, int>::Iterator last = nullptr;
	while (it != tree.end())
	{
		cout << (*it).first << " ";
		last = it;
		++it;
	}
	cout << endl;
	
	it = last;
	while (it != tree.begin())
	{
		cout << (*it).first << " ";
		--it;
	}
	cout << (*it).first << " ";
	cout << endl;

	MyMap<int, int> tree2(tree);


}

int main()
{
	//test_AVLTree();
	//test_RBTree1();
	test_MyMap();
	test_map();
	return 0;
}